package com.modele;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import com.metier.Borne;
import com.metier.Station;
import com.persistance.AccesData;

/**
 * Classe metier Modele de Borne
 * 
 * Permet de mettre en forme des donnees provenant d'une collection de Bornes
 * pour une JTable
 * 
 * @author b0dian
 * @version 1.0
 */
public class ModeleBornes extends AbstractTableModel {
	private String[] entete = { "idBorne", "date mise en service",
			"libelle emplacement", "puissance" };
	private List<Borne> listeBorne;
	private List<Borne> lsBornes;
	private List<Station> stations;
	private ModeleStation modele;

	/**
	 * Constructeur public, cree une instance de Modele de bornes en recuperant
	 * notre collection de bornes
	 * 
	 * @param idTypeCharge
	 *            de type int
	 */
	public ModeleBornes(int idTypeCharge) {
		listeBorne = AccesData.getBornes();
		stations = AccesData.getStations();
		lsBornes = new ArrayList<Borne>();
		for (Borne b : listeBorne) {
			if (b.getType().getCodeTypeCharge() == idTypeCharge) {
				lsBornes.add(b);
			}
		}
	}

	/**
	 * Accesseur permettant de recuperer le nombre de colonnes dans notre entète
	 * predefini
	 * 
	 * @return nbColumn de type int
	 */
	@Override
	public int getColumnCount() {
		return entete.length;
	}

	/**
	 * Accesseur permettant de recuperer le nombre de lignes en recuperant le
	 * nombre d'occurences dans notre collection
	 * 
	 * @return nbLignes de type int
	 */
	@Override
	public int getRowCount() {
		return lsBornes.size();
	}

	/**
	 * Accesseur permettant de recuperer le noms des colonnes dans notre entète
	 * predefini
	 * 
	 * @return nameColumn de type String
	 */
	@Override
	public String getColumnName(int column) {
		return entete[column];
	}

	/**
	 * Accesseur permettant de recuperer les occurrences correspondants dans
	 * notre collection
	 * 
	 * @return valeurs de type String ou int
	 */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
		case 0:
			return lsBornes.get(rowIndex).getIdBorne();
		case 1:
			return lsBornes.get(rowIndex).getDateMiseEnService();
		case 2:
			// return
			// stations.get(lsBornes.get(rowIndex).getIdStation()-1).getLibelleEmplacement();
			return getLibelleStation(lsBornes.get(rowIndex).getIdStation());
		case 3:
			return lsBornes.get(rowIndex).getType().getPuissance();
		default:
			throw new IllegalArgumentException();
		}
	}

	/**
	 * Fonction prive permettant de recuperer les libelle stations auquels les
	 * bornes sont liees
	 * 
	 * @return libelle de type String
	 */
	private String getLibelleStation(int idStation) {
		boolean trouve = false;
		int i = 0;
		String libelle = "";
		while (i < stations.size() && trouve == false) {
			if (stations.get(i).getIdStation() == idStation) {
				libelle = stations.get(i).getLibelleEmplacement();
				trouve = true;
			} else {
				i++;
			}
		}
		return libelle;
	}

}
